// var name = "ziheng";
// var person = {
//   name: "person",
//   sayName: function () {
//     console.log(this.name);
//   },
// };

// function sayName() {
//   var sss = person.sayName;
//   sss(); //window - ziheng
//   person.sayName(); //person - person
//   // (person.sayName)(); //person - person. 这里加不加（）都是一样的，
//   (b = person.sayName)(); // window - ziheng。赋值表达式（独立函数调用）
// }
// sayName();

//面试题2

// var name = "ziheng";
// var person1 = {
//   name: "person1",
//   foo1: function () {
//     console.log(this.name);
//   },
//   foo2: () => {
//     console.log(this.name);
//   },
//   foo3: function () {
//     return function () {
//       console.log(this.name);
//     };
//   },
//   foo4: function () {
//     return () => {
//       console.log(this.name);
//     };
//   },
// };

// var person2 = {
//   name: "person2",
// };

// person1.foo1(); //person1
// person1.foo1.call(person2); //person2

// person1.foo2(); //ziheng  parsent scope 是 window
// person1.foo2.call(person2); //ziheng。parsent scoped 是 window

// person1.foo3()(); //window - ziehgn
// person1.foo3.call(person2)(); //window - ziheng
// person1.foo3().call(person2); // person2 - person2

// person1.foo4()(); // person1 - person1
// person1.foo4.call(person2)(); // person2 - person2
// person1.foo4().call(person2); // person1 - person1

// 面试题3

// var name = "window";

// function Person(name) {
//   this.name = name;
//   (this.foo1 = function () {
//     console.log(this.name);
//   }),
//     (this.foo2 = () => console.log(this.name)),
//     (this.foo3 = function () {
//       return function () {
//         console.log(this.name);
//       };
//     }),
//     (this.foo4 = function () {
//       return () => {
//         console.log(this.name);
//       };
//     });
// }

// var person1 = new Person("person1");
// var person2 = new Person("person2");

// person1.foo1(); // person1 - 'person1'
// person1.foo1.call(person2); // person2 - 'person2'

// person1.foo2(); // person1 - 'person1'
// person1.foo2.call(person2); // person1 - 'person1'

// person1.foo3()(); //window - 'window'
// person1.foo3.call(person2)(); // window - 'window'
// person1.foo3().call(person2); // person2 - 'person2

// person1.foo4()(); // person1 - 'person1
// person1.foo4.call(person2)(); // person2 - 'person2'
// person1.foo4().call(person2); // // person1 - 'person1

//面试题4

var name = "window";

function Person(name) {
  this.name = name;
  this.obj = {
    name: "obj",
    foo1: function () {
      return function () {
        console.log(this.name);
      };
    },
    foo2: function () {
      return () => {
        console.log(this.name);
      };
    },
  };
}

var person1 = new Person("person1");
var person2 = new Person("person2");

person1.obj.foo1()(); // window - 'window'
person1.obj.foo1.call(person2)(); // window - 'window'
person1.obj.foo1().call(person2); // person2 - person2

person1.obj.foo2()(); // person1.obj - 'obj
person1.obj.foo2.call(person2)(); // person2 - 'person2'
person1.obj.foo2().call(person2); // person1.obj - 'obj
